package ch.zhaw.cctd.domain;

import java.awt.Point;

import ch.zhaw.cctd.domain.creep.Debuff;

/**
 * Interface für alle Shootable Elemente. Shootable Elemente sind zum Beispiel Creeps die beschossen werden sollen durch die Shooter Elemente.
 * @author Rolf Koch
 *
 */
public interface Shootable {
	/**
	 * Returns the Center Point of the Element
	 * @return Point
	 */
	public Point getCenter();
	/**
	 * Apply Damage to an Object
	 * @param damage
	 * @return remaining Life
	 */
	public int damage(int damage);
	/**
	 * Query the Money from a Creep
	 * @return Money
	 */
	public int getCreepMoney();
	/**
	 * Collect the Money from a Dead Creep
	 * @return Money collected
	 */
	public int payCreepMoney();
	/**
	 * Checks if the Creep is alive
	 * @return true/false
	 */
	public boolean isAlive();
	/**
	 * Returns the current Life
	 * @return current life
	 */
	public int getCurrentLife();
	
	/**
	 * Returns the total Life
	 * @return total life
	 */
	public int getTotalLife();
	/**
	 * Apply a Debuff to a Creep
	 * @param duration of the slowing
	 */
	public void addDebuff(Debuff debuff);
	
	/**
	 * checks if this shootable currently has a specific ability.
	 */
	public boolean hasAbility(String s);
}
